package com.adobe.utils
{
	public interface IIterator
	{
		/**
		 *
		 * Determines if there are elements remaining in the 
		 * aggregate
		 *
		 * @return true if an element remains, false if not
		 *
		 */
		function hasNext() : Boolean;
		
		/**
		 *
		 * Retrieves the next element in the aggregate
		 *
		 * @return next element based on the current index
		 *
		 */
		function next() : *;
		
		/**
		 *
		 * Resets the cursor / index of the Iterator to 0
		 *
		 */
		function reset() : void;
		
		/**
		 *
		 * Determines the position of the current element in 
		 * the aggreagate
		 *
		 * @return  the current index of the aggreagate
		 *
		 */
		function position() : int;
		
		/**
		 *
		 * Remove must be implemented to provide a standard iterator
		 * implementation.
		 *
		 * <p>
		 * Typically this method would not provide an actual implementation
		 * as an iterator is not to perform modifications, but rather
		 * simply provide a mechanism for iterating an object and thus an
		 * iterator is to be considered read-only.
		 * </p>
		 *
		 * <p>
		 * For implementations which do not provide support for
		 * <code>remove</code> it is recommeneded that an exception
		 * is thrown, typically of type UnsupportedOperationException
		 * </p>
		 *
		 */
		function remove() : void;
		
	}
}